package com.fish.service.passport;

import java.util.List;
import java.util.Map;

import com.fish.common.constant.QueryPage;
import com.fish.passport.po.PassCode;
import com.fish.passport.po.PassPortCode;
import com.fish.passport.po.PassProvider;
import com.fish.passport.po.Template;

/**
 * @author ShiHui
 */
public interface PassCodeService {
	
	/**
	 * 处理申请
	 * @param codeId
	 * @return
	 */
	boolean onApply(String codeId);
	
	/**
	 * 处理事件
	 * @param eventId
	 * @return
	 */
	boolean onEvent(String eventId);
	
	/**
	 * 按条件查询
	 * 
	 * @param查询参数
	 */

	List<PassCode> queryPassCodes(PassCode passCode);

	/**
	 * 添加通关码信息
	 * 
	 * @param PassCode对象
	 */
	String addPassCode(PassCode passCode);

	/**
	 * 修改
	 */
	void updatePassCode(PassCode passCode);

	/**
	 * 删除
	 */
	void deletePassCode(String codeId);

	/**
	 * 通过申请流水号查询通关码信息
	 * 
	 * @author clj
	 * @param 查询参数
	 */
	PassCode getCodeBySerialNo(String SerialNo);

	/**
	 * 根据状态查询申请码请求的队列数据
	 * 
	 * @author clj
	 * @param 查询参数
	 */
//	List<PassCode> queryApplyCodeListByStuts(String status);

	/**
	 * 根据状态查询其他非申请码请求的队列数据
	 * 
	 * @author clj
	 * @param 查询参数
	 */
//	List<PassCode> queryEventListByStuts(String status);

	/**
	 * 查询通关点的提供商信息
	 * 
	 * @author clj
	 * @param codeId
	 * 
	 * @return
	 */
	List<PassPortCode> queryProviderByCode(Long codeId);
	/**
	 * 生成申请流水号
	 * @return
	 */
	public Long getSerialNo( );
	/**
	 *  查询通关点信息记录数
	 * @param params
	 * @return 
	 */
	public Integer selectRowCount(PassCode passCode);
	
	/**
	 * 通过服务商和游玩日期查询通关点信息
	 * 
	 * @param params
	 * @return
	 */

	public List<PassCode> selectCodeByProviderIdAndValidTime(Map<String,Object> params);
	
	/**
	 * 通过组合参数查询通关码信息
	 * 
	 * @param 查询参数
	 */
	public PassCode getPassCodeByParams(Map<String, Object> params ) ;
	
	/**
	 * 查询订单是否已经履行
	 * @param params
	 * @return
	 */
	public boolean hasPerform(Map<String, Object> params );
	
	/**
	 * 通过辅助码MD5编号查询通关码信息
	 * 
	 * @param 查询参数
	 */
	public PassCode getCodeByAddCodeMd5(String addCodeMd5);
	
	/**
	 * 查询离线模式通关信息列表
	 * @param params
	 * @return
	 */
	public List<PassCode> selectVouchersByProviderId(Map<String,Object> params);
	
	/**
	 * 通过通关点编号查询通关点关联信息
	 * 
	 * @param CodeId
	 * @return
	 */
	public List<PassPortCode> searchPassPortByCodeId(String codeId) ;
	/**
	 * 通过模板代码查询模板信息
	 * 
	 * @param templateCode
	 * @return
	 */
	public Template selectTemplateByCode(String templateCode);
	
	public Integer getSyncUpdatePassCodeCount(Map<String, Object> queryOption);

	public Integer getUpdatePassCodeByCodeId(Map<String, Object> queryOption);

	public Integer getUpdatePassCodeBySerId(Map<String, Object> queryOption);
	
	public Long queryPassCodeCountByObject(PassCode passCode);
	
	public List<PassCode> queryPassCodeByObject(PassCode passCode, QueryPage queryPage);
}
